package educar.controllers;



import javax.swing.filechooser.FileSystemView;

import educar.gui.DocenteView;
import educar.gui.IView;
import educar.models.Actividad;
import educar.models.Resolucion;
import educar.models.Docente;
import educar.models.Materia;
import educar.models.Realizacion;
import educar.models.Session;
import educar.models.actividadNotFound;
import educar.models.docenteNotFound;
import educar.models.materiaNotFound;
import educar.models.resolucionNotFound;
import educar.utils.Archivo;


public class DocenteResolucionesController implements IController
{
    private DocenteView view;
    private Docente docente;
    private Materia materiaSeleccionada;
    private Actividad actividadSeleccionada;
    private Realizacion realizacionSeleccionada;
    private Resolucion resolucionSeleccionada;

    public DocenteResolucionesController()
    {
        String dni = Session.getCurrentUser().getDniUser();
        try
        {
            docente = Docente.getDocenteByDni(dni);
        }
        catch (docenteNotFound e)
        {
            e.printStackTrace();
        }
    }

    public void setView(IView view)
    {
        this.view = (DocenteView)view;
        actualizarMaterias();
    }


    public void process(String model)
    {
        if (model.compareTo(DocenteView.CALIFICAR) == 0)
            calificar();
        if (model.compareTo(DocenteView.DESCARGARRESOLUCION) == 0)
            descargarResolucion();
    }

    private void descargarResolucion()
    {
        String nombreArchivo = resolucionSeleccionada.getCodigo();
        try
        {
            FileSystemView system = FileSystemView.getFileSystemView();
            String origen = system.getHomeDirectory() + "/unrc-educar/resoluciones/" + nombreArchivo;
            String destino = system.getHomeDirectory() + "/" + nombreArchivo;
            Archivo.copiar(origen, destino);
        }
        catch (Exception e)
        {
            e.printStackTrace();
            view.present("Archivo no valido");
        }
        view.present("Descargado correctamente en la Home");

    }


    private void calificar()
    {
        String codigo = resolucionSeleccionada.getCodigo();
        String dniDocente = docente.getDni();
        String nota = view.getNota();


        try
        {
            if (nota.isEmpty() || !notaCorrecta(nota))
            {
                view.present("Error en la nota (Max 10, Min 1)");
            }
            else
            {
                resolucionSeleccionada = Resolucion.getResolucionByCodigo(codigo);
                resolucionSeleccionada.setNota(nota);
                resolucionSeleccionada.setDocente(dniDocente);
                resolucionSeleccionada.update();
                view.present("Nota asignada correctamente");
            }

        }
        catch (resolucionNotFound e)
        {
            e.printStackTrace();
            view.present("Error al calificar");
        }


    }


    private boolean notaCorrecta(String nota)
    {
        Float notaNum = Float.valueOf(nota);
        if ((notaNum > 10) || (notaNum < 1))
            return false;
        else
            return true;
    }


    public void processItemList(String name, String item)
    {
        if (item.compareTo("resolucionesMateriasList") == 0)
            processMateria(name);
        else if (item.compareTo("resolucionesActividadesList") == 0)
            processActividad(name);
        else if (item.compareTo("resolucionesResolucionesList") == 0)
            processResoluciones(name);
    }


    private void processResoluciones(String name)
    {
        try
        {
            realizacionSeleccionada = Realizacion.getRealizacionByCodigo(name);
            resolucionSeleccionada = Resolucion.getResolucionByCodigo(name);
            resetResolucion();
            view.setRNombre(realizacionSeleccionada.getAlumno().getNombre());
            view.setRApellido(realizacionSeleccionada.getAlumno().getApellido());
            view.setRDni(realizacionSeleccionada.getAlumno().getDni());
            view.setNota(resolucionSeleccionada.getNota());

        }
        catch (Exception r)
        {
            r.printStackTrace();
        }
    }

    private void processMateria(String name)
    {
        try
        {
            materiaSeleccionada = Materia.getMateriabyCodigo(name);
            actualizarActividades();
            resetMateria();
            resetResolucion();
            view.setRMateria(materiaSeleccionada.getNombre());
            view.setRCodigo(materiaSeleccionada.getCodigo());
        }
        catch (materiaNotFound e)
        {
            e.printStackTrace();
        }
    }


    private void resetMateria()
    {
        view.setRMateria("");
        view.setRCodigo("");
    }

    private void resetResolucion()
    {
        view.setRNombre("");
        view.setRApellido("");
        view.setRDni("");
        view.setNota("");
    }

    private void processActividad(String name)
    {
        try
        {
            actividadSeleccionada = Actividad.getbyCodigo(name);
            resetResolucion();
            view.setRDescripcion(actividadSeleccionada.getDescripcion());
            actualizarResoluciones();
        }
        catch (actividadNotFound e)
        {
            e.printStackTrace();
        }
    }

    private void actualizarActividades()
    {
        String[] actividades = Actividad.getAllByMateriasArray(materiaSeleccionada.getCodigo());
        view.setResolucionesActividades(actividades);
    }

    private void actualizarMaterias()
    {
        String[] materias = docente.getMateriasAsignadasArray();
        view.setResolucionesMaterias(materias);
    }

    private void actualizarResoluciones()
    {
        String[] resoluciones = Resolucion.getAllByActividadArray(actividadSeleccionada);
        view.setResoluciones(resoluciones);
    }

}
